package com.yaorange.common.utils.nongjt;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.yaorange.common.enums.SmsEnum;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SmsUtils {
    /**
     * 阿⾥云 accessKeyId（安全信息管理下⾯） TODO 替换成⾃⼰的
     */
    static final String ACCESS_KEY_ID = "LTAI5t8bx7rad9Rmf9qLNwHp";
    /**
     * 阿⾥云 accessKeySecret（安全信息管理下⾯）TODO 替换成⾃⼰的
     */
    static final String ACCESS_KEY_SECRET = "syVCGcztblPocwOXGUbaPlbHqLpp60";


    static final String SIGN_NAME = "your-sign-name"; // 替换为你的短信签名名称

    // 短信模板代码
    static final String TEMPLATE_CODE = "your-template-code"; // 替换为你的短信模板代码
    /**
     * 使⽤AK&SK初始化账号Client
     *
     * @return Client
     * @throws Exception
     */
    public static Client createClient() throws Exception {
        Config config = new Config()
                .setAccessKeyId(ACCESS_KEY_ID)
                .setAccessKeySecret(ACCESS_KEY_SECRET);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }
    /**
     * 发送短信
     *
     * @param mobile ⼿机号
     * @param param 模板参数，JSON格式
     * @param smsEnum 消息模板
     * @return true 消息发送成功，false 消息发送失败
     */
    public static Boolean sendSms(String mobile, JSONObject param, SmsEnum smsEnum) {
        try {
            // 初始化请求客户端
            Client client = createClient();
            // 组装请求对象
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
            // 必填:待发送⼿机号
                    .setPhoneNumbers(mobile)
                    // 必填:短信签名-可在短信控制台中找到
                    .setSignName(smsEnum.getSignName())
                    // 必填:短信模板-可在短信控制台中找到
                    .setTemplateCode(smsEnum.getTemplateCode())
            // 可选:模板中的变量替换JSON串,如模板内容为 "您的验证码为${code},该验证码5分钟内有效，请勿泄露他⼈！"
                    .setTemplateParam(JSON.toJSONString(param));
            // 获取响应对象
            SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
            log.info("短信接⼝返回数据 {}", JSONObject.toJSONString(sendSmsResponse));
            if ("OK".equals(sendSmsResponse.getBody().getCode())) {
                return Boolean.TRUE;
            }
        } catch (Exception e) {
            log.error("短信验证码发送异常：{}", e.getMessage(), e);
        }
        return Boolean.FALSE;
    }
    /**
     * 测试⽅法
     *
     * @param args
     */
    public static void main(String[] args) {
        String mobile = "";
        JSONObject param = new JSONObject();
        // 这⾥需要根据短信模板配置的参数调整
        param.put("code", ValidateCodeUtils.generateValidateCode(6));
        sendSms(mobile, param, SmsEnum.REGISTER_TEMPLATE_CODE);
    }
}